﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CardCharger.lib
{
    /************************************************************************/
    //公共部分接口
    public interface ICardReader
    {

        /// <summary>
        /// 读卡器 操作句柄
        /// </summary>
        IntPtr readerFd { set; get; }


        #region 读卡器操作部分

        /// <summary>
        /// 打开读卡器
        /// </summary>
        /// <param name="para">入参，待定</param>
        /// <returns>句柄</returns>
        IntPtr CardReaderOpen(String para);


        /// <summary>
        /// 关闭读卡
        /// </summary>
        /// <returns>成功 true,失败 false</returns>
        bool CardReaderClose();




        /// <summary>
        /// 读卡器复位
        /// </summary>
        ///<param name="fd">设备句柄</param>
        ///<param name="paras">入参</param>
        /// <returns></returns>
        String CardReaderReset(object paras);

        /// <summary>
        /// 读卡器版本号
        /// </summary>
        /// <param name="fd"></param>
        /// <returns></returns>
        string CardReaderVersion();


        /// <summary>
        /// 读卡器的其它操作,如 闪烁，响铃
        /// </summary>
        /// <param name="para">入参</param>
        /// <returns></returns>
        string CardReaderCtrl(object[] para);


        #endregion


        #region   卡操作部分

        #region MI 卡
        #endregion

        #region CPU卡
        /// <summary>
        /// 复位 卡
        /// </summary>
        /// <param name="fd"></param>
        /// <returns>返回卡的复位信息</returns>
        String CardReset();

        /// <summary>
        /// 读取卡id,返回 8 字节 卡序列号
        /// </summary>
        /// <param name="fd"></param>
        /// <returns>8字节 卡号，实际上只有前 4个字节有效</returns>
        byte[] CardGetId();


        /// <summary>
        /// 发送APDU包
        /// </summary>
        /// <param name="fd">句柄</param>
        /// <param name="len">命令长度</param>
        /// <param name="comm">命令</param>
        /// <param name="lenr">返回长度</param>
        /// <param name="resp">返回数据</param>
        /// <returns>FFFF 为失败，其它为SW1 SW2 状态</returns>
        UInt16 CardApdu(UInt16 len, Byte[] comm, ref UInt16 lenr, Byte[] resp);




        /*-----------------------------------------------------------------
        |
        | 5. 设置CPU卡读写地址NAD                                         
        |	   参数: 
        |         NAD读写地址
        |
        |    返回值: 无
        |	   说明: 
        |         该函数使用于CRW-V(VI)系列读卡器,系统缺省值为00
        |         00 对主卡操作
        |         12 对读写器操作/或对主卡进行操作
        |         13 选择双卡座读写器的SAM卡或选择三卡座读写器的SAM1卡,
        |	      14 对三卡座读写器选择SAM2卡 
        |
        -----------------------------------------------------------------*/
        void Card_SetNAD(Byte nad);

        #endregion



        #endregion

    }

}
